
#if !defined(_ZDARZENIA_H)
#define _ZDARZENIA_H

#include "iKomunikacja.h"

#include <iostream>
#include <string>
#include <vector>
#include <math.h>

using namespace std;

typedef struct samolot_polozenie{
		int id_samolotu;
		string nazwa_samolotu;
		string lotnisko_zrodlowe;
		string lotnisko_docelowe;
		bool wyladowal;				//true - na ziemi / false-w powietrzu
		};

typedef struct lista_awarii{  //bedziemy przechowywali zestaw list awarii na danym lotnisku, samolocie i o pogodzie info
		int id_obiektu;				//to na pyszlosc
		string nazwa_obiektu;		// a to teraz dl latwosci
		vector<zdarzenie> awaria;
		};
			



class Zdarzenia : public iKomunikacja{
private:

	int id;					//generator id(prosty na razie)
	Zdarzenia();
//zrobmy z niego singletona???	
	
//dane ktore wczytamy na poczatku
	vector<lotnisko> lotniska;		//lista lotnisk
	vector<samolot> samoloty;		//lista samolotow dostepnych, w sensie modeli
	vector<zdarzenie> zdarzenia;	//lista zdarzen jakie moga sie przydazyc

//tablice pomocnicze	
	
	vector<samolot_polozenie> akt_pol_samolotow; // miejsce aktualnego polozenia samolotow(lotniska)
	vector<lista_awarii> awarie_lotnisk;				//tu zarowno awarie jak i pogode
	vector<lista_awarii> stan_pogody;
	vector<lista_awarii> awarie_samolotow;			// a tu tylko dla samolotow
	 const char* airport_from;
	 const char* airport_to;
	 const char* airplane;
	 const char* airplane_event;
	 const char* airport_event;
	 const char* weather;
	 
	 //nowe 23.05
	 int level;
	 int airplane_id;
	 //koniec nowe
public:

	//potrzeba jeszcze tu funkcje dopracowac ale to pozniej
	
	
	~Zdarzenia();

	//kto to kurwa wymyslil??

	static Zdarzenia& getInstance(){
		static Zdarzenia instance;
		return instance;
		}
	
//samolot		
	int wylicz_zasieg();											//sprawdzamy czy zasiegu starczy
	double wylicz_zasieg(int id_lotniska_start, int id_lotniska_doc);	//sprawdzamy zasieg na potrzeby polaczen
	bool sprawdz_stan(int id_samolot);						//sprawdzamy stan samolotu
	
	//dodalem nowe
	void dodaj_awarie_samolotu();
	void usun_awarie_samolotu();
	
	//koneic nowych
	
	void aktualizacja_polozenia(int id_samolotu, bool stan);	//aktualizacja polozenia: ziemia/powietrze
	vector<samolot_polozenie> get_polozenie();			//zwraca liste polozenia samolotow
	vector<samolot> get_samoloty();						//zwraca dostepne samoloty
	vector<lista_awarii> get_samoloty_awarie();			//zwraca liste samolotow i ich awarii
	lista_awarii get_samolot_awarie(const char* nazwa_samolot);	//zwraca liste awarii konkretnego samolotu
	
	void wyslij_samolot();
	vector<samolot_polozenie> get_aktywne_samoloty();


	
//lotnisko	
//nowe 
	void dodaj_awarie_lotniska();
	void dodaj_awarie_pogody();
	void usun_awarie_lotniska();
	void usun_awarie_pogody();
	
vector<zdarzenie> mozliwe_awarie_lotnisko();
vector<zdarzenie> mozliwe_awarie_pogody();
		
//koniec nowe	
	vector<zdarzenie> get_awarie();
	vector<lotnisko> get_lotniska();							//wysuplanie dostepnych lotnisk
	vector<lista_awarii> get_lotniska_awarie();			//wysuplanie listy_awarii_na_lotniskach
	lista_awarii get_lotnisko_awarie(const char* nazwa_lotniska);		//wysuplanie listy_awarii_na_danym_lotnisku
	vector<lista_awarii> get_lotniska_pogoda();			//wysuplanie listy_pogody_na_lotniskach
	lista_awarii get_lotnisko_pogoda(const char *nazwa_lotniska);		//wysuplanie listy_pogogdy_na_danym_lotnisku
	
vector<samolot_polozenie> samoloty_na_lotnisku();
vector<lotnisko> lotniska_w_zasiegu();
	
	void put_airport_from(const char* nazwa_lotniska);
	const char* get_airport_from();
	void put_airport_to(const char* nazwa_lotniska);
	const char* get_airport_to();
	void put_airplane(const char* nazwa_samolotu);
	const char* get_airplane();
	void put_weather(const char* nazwa_pogody);
	const char* get_weather();
	void put_event(const char* nazwa_awarii);
	const char* get_event();
	void put_airplane_event(const char* nazwa_awarii);
	const char* get_airplane_event();


	//nowe
	// dodalem 23.05 LSD
	
	vector<zdarzenie> mozliwe_awarie_samolot(); //do zaimplementowania
	// pobiera z airplane_id identyfikator samolotu
	
	//odnosnie dodaj_awarie_samolotu() - moze juz pobierac z pola airplane_id zamiast z airplane
	void wyslij_ponownie_samolot();
	
	void put_level(int level);
	int get_level();
	void put_airplane_id(int id);	
	int get_airplane_id();
	
	void czy_wyladowal(int id_samolotu, string nazwa_lotniska);
	char * wybor_maszyny();
	
};

#endif  cd